home *** CD-ROM | disk | FTP | other *** search
/ Amiga Games Extra 1996 September / Amiga Games Extra CD-ROM 9-1996.iso / userbox / publicdomain / maildemon / pmbs2emp.lzx / PMBS2Emp.c < prev   
C/C++ Source or Header  |  1996-05-05  |  2KB  |  106 lines

  1.  
  2. //  PMBS2Emp 1.2b - Copyright © 05-May-1996 by Maik "BLiZZeR" Schreiber
  3. //  -------------------------------------------------------------------
  4. //
  5. //  Dieses Programm schreibt alle Bretter des Mailboxprogramms Prometheus
  6. //  (PMBS) in eine Empfängergruppe (.emp). Der Server muß dabei laufen!
  7. //
  8. //  Aufruf  :  PMBS2Emp ><Dateiname> [<Muster>]
  9. //  Beispiel:  PMBS2Emp >Bretter.emp #?WERB#?
  10. //
  11. //  Mit dem Aufruf "PMBS2Emp" (also ohne Parameter) kann man sich die
  12. //  Bretter auch in die Shell ausgeben lassen.
  13. //
  14. //  Der Parameter <Muster> bestimmt die auszugebenden Bretter. Wird kein
  15. //  Muster angegeben, wird automatisch "#?" genommen, also alle Bretter.
  16. //
  17. //
  18. //  History:
  19. //  --------
  20. //  - 1.0, 12-Jan-1996:
  21. //    - erste Version von PMBS2Emp (Sourcecode in AmigaE)
  22. //
  23. //  - 1.1, 25-Apr-1996:
  24. //    - Sourcecode nach C umgesetzt
  25. //
  26. //  - 1.2, 03-May-1996:
  27. //    - Patternmatching möglich
  28. //  - 1.2b, 05-May-1996:
  29. //    - Abbruch mit CTRL+C möglich
  30.  
  31.  
  32. #define WBWINNAME "CON:0/11/640/189/PMBS2Emp"
  33.  
  34.  
  35. #include <exec/types.h>
  36. #include <pragma/exec_lib.h>
  37. #include <pragma/dos_lib.h>
  38. #include <dos/dos.h>
  39. #include <iostream.h>
  40. #include <string.h>
  41. #include <ctype.h>
  42. #include <stdlib.h>
  43. #include <wbstartup.h>
  44.  
  45. void upperstr(char *str)
  46. {
  47.   ULONG len,
  48.         dummy;
  49.  
  50.   len = strlen(str);
  51.   for (dummy = 0; dummy < len; dummy++)
  52.     str[dummy] = toupper(str[dummy]);
  53. };
  54. BOOL chkabort(void)
  55. {
  56.   return(CheckSignal(SIGBREAKF_CTRL_C) != 0);
  57. };
  58.  
  59. int main(int argc, char *argv[])
  60. {
  61.   struct MsgPort *server;
  62.  
  63.   Forbid();
  64.   server = FindPort("rexx_PXServer");
  65.   Permit();
  66.   if (!server)
  67.   {
  68.     cout << "Server nicht gefunden -> Abbruch!\n";
  69.     exit(RETURN_FAIL);
  70.   };
  71.   else
  72.   {
  73.     char *pat;
  74.  
  75.     if (pat = (char *) malloc(256))
  76.     {
  77.       char  *pattern;
  78.       ULONG  len;
  79.  
  80.       strcpy(pat, strlen(argv[1]) ? argv[1] : "#?");
  81.       if (pattern = (char *) malloc(len = strlen(pat) * 2 + 2))
  82.       {
  83.         ULONG *list = (ULONG *) *((ULONG *) *((ULONG *) ((ULONG) server + 198))),
  84.                max  = *list * 4,
  85.                dummy;
  86.         char  *str;
  87.  
  88.         upperstr(pat);
  89.         ParsePatternNoCase(pat, pattern, len);
  90.         for (dummy = 4; dummy <= max && !chkabort(); dummy += 4)
  91.         {
  92.           if (strlen(str = (char *) *((ULONG *) ((ULONG) list + dummy))))
  93.           {
  94.             if (MatchPatternNoCase(pattern, str))
  95.               cout << str << "\n";
  96.           };
  97.         };
  98.         free(pattern);
  99.       };
  100.       free(pat);
  101.     };
  102.   };
  103.   exit(RETURN_OK);
  104. };
  105.  
  106.